> ## Documentation Index
> Fetch the complete documentation index at: https://mintlify.com/jaypopat/cf_ai_duet/llms.txt
> Use this file to discover all available pages before exploring further.

# Using the Shared Terminal

> Work collaboratively in the shared terminal environment

Duet's shared terminal is the heart of pair programming sessions. Every user in a room shares the same terminal - all input and output is synchronized in real-time.

## Terminal Features

### Real-time Synchronization

When any user types in the terminal:

* Their input is broadcast to all users in the room
* Everyone sees the same terminal state
* Terminal updates are pushed to all clients via subscription channels (internal/ui/model.go:637-671)

### Typing Indicators

You can see when others are actively typing:

* Appears when a user sends input to the terminal
* Displays "\[username] is typing..."
* Automatically clears after 2 seconds of inactivity
* Debounced to avoid spam (500ms between broadcasts)

See internal/ui/model.go:456-462 for implementation.

### Pre-installed Tools

Each room's workspace includes:

* **nvim** - Text editor for collaborative coding
* **Node.js** - JavaScript runtime for running scripts
* Standard Unix utilities (git, grep, find, etc.)

## Working in the Terminal

### Basic Terminal Input

The terminal accepts all standard keyboard input (internal/ui/model.go:418-464):

* **Regular keys** - Type normally
* **Enter** - Send command
* **Backspace** - Delete character (sends ASCII 127)
* **Tab** - Auto-completion
* **Arrow keys** - Navigate command history and cursor
  * Up: `\x1b[A`
  * Down: `\x1b[B`
  * Right: `\x1b[C`
  * Left: `\x1b[D`
* **Home/End** - Jump to line start/end
* **Delete** - Forward delete
* **Esc** - Escape key

### Running Commands

Simply type commands as you would in any terminal:

```bash theme={null}
# Clone a repository
git clone https://github.com/user/repo.git

# Navigate and explore
cd repo
ls -la

# Edit files
nvim src/index.js

# Run scripts
node index.js
npm install
npm test
```

All collaborators will see:

* The commands being executed
* Real-time output
* Any errors or results

### Working with Files

#### Using nvim

The workspace includes nvim for collaborative editing:

```bash theme={null}
nvim myfile.js
```

All users will see the nvim interface, but keep in mind:

* Only one person should edit at a time to avoid conflicts
* Use the AI assistant or sandbox for file operations when working simultaneously

#### File Operations

Standard Unix file commands work as expected:

```bash theme={null}
# Create files and directories
mkdir src
touch src/app.js

# View file contents
cat src/app.js
less README.md

# Copy and move
cp file1.js file2.js
mv old.js new.js

# Search
grep -r "function" src/
find . -name "*.js"
```

## Terminal Modes

Duet has different input modes (internal/ui/screen.go:16-23):

### Normal Mode (Default)

* Standard terminal interaction
* All keyboard input goes to the terminal
* Use keyboard shortcuts to access other features

### AI Mode

See [AI Interaction](/guides/ai-interaction) for details on the AI prompt mode.

### Sandbox Mode

See [AI Interaction](/guides/ai-interaction) for details on direct sandbox command execution.

## Special Keyboard Shortcuts

These shortcuts are reserved for Duet features and won't be sent to the terminal:

* `ctrl+g` - Enter AI prompt mode
* `ctrl+r` - Enter sandbox command mode
* `ctrl+a` - Toggle AI sidebar visibility
* `ctrl+j` - Scroll AI sidebar down
* `ctrl+k` - Scroll AI sidebar up
* `ctrl+l` - Leave room and return to launch screen

See internal/ui/model.go:379-416 for the full keyboard shortcut map.

## Workspace Directory

Your terminal starts in the room's workspace directory:

* Path: `/app/workspaces/<workspace-name>/`
* Isolated per room
* Persists for the lifetime of the room
* Automatically deleted when the last user leaves

The workspace is initialized from a template (internal/room/manager.go:85-91) that includes necessary tools.

## Best Practices

### Coordination

* **Communicate before running destructive commands** - Everyone shares the same filesystem
* **Take turns editing files** - Multiple simultaneous edits can cause conflicts
* **Use descriptive commit messages** - Others can see your git activity

### Performance

* The terminal auto-resizes based on window dimensions (internal/ui/model.go:156-159)
* Minimum recommended size: 120x24 for optimal layout with sidebars
* Terminal content is efficiently streamed via update channels

### Troubleshooting

* If the terminal seems frozen, it may be waiting for input in a program (like nvim or less)
* Press `ctrl+c` in the terminal to cancel a running command
* Use `ctrl+l` (Duet shortcut) to leave the room if something goes wrong

## Terminal Limitations

* The terminal runs in a chroot environment for security
* Some system-level commands may not be available
* Network access depends on server configuration
* Terminal size is shared - one user's window resize affects everyone
